CAB202 作业 1,学期 2 2019
评估权重:30%
上下文
你的任务是把汤姆和杰里的经典角色在基于终端
的游戏的生活。汤姆是一只猫,他单纯地把老鼠捉到,杰瑞,在他家里猖獗地跑
着。汤姆绕着杰里在房间里跑来跑去,定期扔鼠标,并不断
改变他的方向,向杰里移动。杰里只是想奶酪,比汤姆快,但
当他消耗了足够的奶酪,并采取了追逐到一天的第二个房间,他喜欢
有一点点的乐趣,通过刺自己的一些武器,以指导汤姆。
级别 1 规格
任务 1 – 文件 IO、字符串解析和常规游戏初始化(6标记)a)文件
IO:从输入映射初始化
游戏应期望文本文件作为命令行参数。此格式的一般格式
文本文件在附录中给出。您必须能够分析任何长度的文本文件,并
编码任意数量的墙壁、陷阱和宝藏。您可能认为该文件将只包含
一组坐标,每个为汤姆一个d杰里。
请注意:文本文件中给出的坐标都相对于屏幕大小。分析文本文件时,
需要将这些坐标转换为屏幕坐标。您的
游戏需要适应当前的终端大小,该终端大小大于
80×24(80 列,24 行) 。
b) 其他游戏设置:状态栏
状态栏应绘制在屏幕的前 3 行,第一行(屏幕行 0)
应按顺序显示;
i. .你的学生编号
ii.当前游戏的核心 (最初 0),
iii.活跃玩家的当前生活(最初为 5),
iv。
活跃玩家(”J”表示杰瑞,”T”表示汤姆,默认值为”J”),
v。
游戏开始以来所经过的时间以分钟和秒格式MM:SS(最初00:00). 第三行(screen 第 2 行)应按顺序显示;
vi. 屏幕上当前奶酪的数量(最初为 0),
vii。
屏幕上当前鼠标陷阱的数量(最初为 0),
第八个。屏幕上当前的武器数量(最初为 0,参见第 2 级,了解 details)。
任务 2 = 汤姆和杰里运动 (5 标记)
a) Jerry:用户控制移动
默认情况下,用户应该能够分别使用”w”、”a”、”s”、”d”键分别控制杰里向上、
向左、向下和向右移动。杰里应该移动一个像素的each按键,
在相应的方向。玩家不应能够穿过状态栏(屏幕的前 3
行)。
b) 暂停模式
游戏应能通过按”p”键暂停。在暂停模式下,所有自动
游戏动态都应冻结,包括计时器,但用户仍应能够
移动玩家,收集宝藏,失去生命。游戏不应在暂停
模式下启动。
c) 汤姆:自动移动
汤姆旨在找到和捕捉杰里,同时随机下降鼠标陷阱在他的
整个旅程。每当汤姆与墙相撞时,他都会随机地改变速度和方向。
如果高级运动在
5b(ii) 中规定正确实施,则此标准也将授予标记。玩家切勿穿过tatus 栏(屏幕的前 3 行)。
d) 基本碰撞检测
汤姆和杰里不能穿过墙壁,也不能离开他们
目前的房间的边界(他们必须被限制在屏幕的边界内,可见)。你必须
对碰撞进行检测,这样杰里就不会进一步移动,如果下一步将
跨越墙壁,屏幕边框或状态栏。Tom 也不应跨越墙壁、屏幕
边框或状态栏,但他必须在
与这些游戏元素碰撞时自动更改速度和速度。碰撞检测必须在
汤姆,杰里,墙,奶酪,陷阱,武器,边界和
状态栏的所有实现元素之间存在。行为碰撞时表现出的,如第e 相关章节
任务 3 和 4。
任务 3 = 陷阱和宝藏 (5 标记)
a) 奶酪外观
游戏开始后,奶酪应每隔 2 秒出现在随机位置,
直到屏幕上最多显示 5 个奶酪。奶酪应该只出现在屏幕上的清晰
位置;不应该与现有的游戏元素重叠。奶酪
不应出现在状态栏(屏幕的前 3 行)。
b) 奶酪互动
杰里是最快乐时,充满了奶酪。他会吃任何奶酪,他越过,没有限制,但
很高兴开始探索隔壁房间,一旦他消耗了5块奶酪在目前的
房间。他吃的每块奶酪都会增加1分。奶酪将继续出现每隔 2秒在
Jery已满后,但门将解锁,只要 5 奶酪已
消耗 (5 点累积).Jerry 在移入门之前不会进入隔壁房间,
但门必须出现在房间内,并在累积 5 分后保持可见。
汤姆会与奶酪碰撞和继续他的道路没有效果。
c) 捕鼠器外观和交互
汤姆将随机放下捕鼠器,因为他在屏幕上移动,每隔3秒。
他只有5个陷阱,所以不能躺在超过5在房间里,b但他确实自动恢复
他的陷阱,一旦杰里已经抓住了他们。有关 Jerry 碰撞详细信息,请参阅生命源管理 (3f)。
鼠标陷阱应仅出现在屏幕上的清晰位置;
不应该与现有的游戏的elements重叠。汤姆可以与捕鼠器相撞,继续
他的路径,没有效果。陷阱不应出现在状态栏(屏幕的前 3
行)中。
d) 门外观:前进或胜利
一旦杰里有足够的奶酪(5件),门必须在屏幕上的某个地方。
此门应用”X”字符(大写 X)表示,并且不应出现在
与房间任何当前元素重叠的任何地方(即它必须出现在可用空间中),
没有与奶酪、墙壁、奶酪、陷阱、状态栏等重叠的地方。当 Jerry
与这扇门碰撞时,他应该在第二个房间前进到下一个级别(如果级别 2
已经实现),或者他应该赢得比赛,并且屏幕上的游戏应该出现。
门外观基于 p・对奶酪消费量,而不是累积的积分,在当前
房间。
e) 生活来源管理
杰里失去生命,每次他与捕鼠器碰撞,每次他被汤姆抓住。
如果汤姆抓住杰里,除了失去一个生命,汤姆和杰尔y 都重置为初始
位置。游戏的所有其他元素保持不变。如果玩家在
游戏过程中的任何时候的生活达到 0,则屏幕上的游戏应出现。
f) 游戏屏幕
如果玩家赢或输游戏,游戏 over 屏幕应出现,用户应
提供重新启动或退出的选项。重新启动必须将所有游戏状态重置为
从文本文件读取的初始状态。退出必须立即返回终端。
级别 2 规范
PRE-符合性:在达到级别 2 的分数之前,必须证明级别 1 的体面实现。
您必须实现完成级别 1 并通过门前进到 2 级的能力,
如级别 1 规范中所述。您还必须实现一个快捷方式,
用户可以通过按”l”键来循环切换级别,从而获得 2 级标记的资格。
任务 4 = 无限水平和武器化(7 标记)
a) 附加文本文件参数
为了实现级别 2,您必须通过命令行传递至少一个附加的文本文件参数。
将读取第二个参数以初始化级别 2。所有进一步的任务 4 和 5
行为都应在级别 2 中进行演示(如果实施,则进一步级别)。
b) 杰里转:武器
赋予杰里发射武器的能力,如烟火,按’f’键。这种
烟火应该总是朝汤姆射击,对于满分,你的烟火应该
不断更新它的角度对汤姆的当前位置,因为他移动。如果weapon
与墙壁相撞,或在到达汤姆之前离开屏幕,烟火必须消失,
屏幕上当前的武器数量应相应地更新。如果
烟火击中汤姆,它应该消失,他的位置应该重新到
当前级别的文本文件中给出的初始位置。烟火可以不碰撞地通过奶酪和捕鼠器。
杰里每打汤姆的烟火都得1分。武器绝不应
穿过状态栏(screen的前 3 行)。
c) 无限级别
游戏应接受任意数量的文本文件作为命令行参数。每个
文本文件都提供了游戏新级别的结构。每个文件应该提供
一个不同的房间结构,并且应该可以访问一个与所有级别的s;通过一扇门
出现后,5奶酪已消耗在当前的水平。总积分
仍应反映所有级别累积的积分,包括通过
武器累积的积分。
通过仔细遵循与示例文件相同的结构,创建自己的更多
内容。要实现此功能的满分,还必须使用”可玩性”实现
正确的可玩性。
任务 5 = 展示精通(7 分)
a) 任意墙
一旦汤姆和杰里进入游戏的第二个房间,我们发现墙壁不太
有序。他们中的许多人是对角线,但汤姆和杰里将继续展示
相同的b ehaviour与这些新的墙壁。这将涉及编写一个更新的、创造性的
碰撞检测解决方案,该解决方案适用于任何对角线或直线
配置的墙壁。
b) 玩家增强和流畅
用户应该能够按’z’键切换角色,玩家应该有
增强的能力。当前未播放的角色应展示适当的
运动。这个运动应该符合汤姆寻找
杰里的主题,杰里试图逃避汤姆,而收集奶酪。这将涉及;
i. .实现一个智能的”逃避”运动模式的自动杰里,以避免
用户控制的汤姆,而”寻找”奶酪,
ii. 为自动 Tom 实施”寻人”移动模式,以寻求用户
控制的 Jerry,
iii. 允许手动放置
奶酪,通过按下”c”键(一次在屏幕上最多放置 5 个),诱使自动杰里更接近用户控制的 Tom,
iv. 通过
按下”m”键(一次在屏幕上最多放置 5 个),允许在用户控制的 Tom 的当前位置手动放置 mouse陷阱,
v. 汤姆的生活系统(最初5个生命,每场烟火击打减少1个),vi。
杰里武器的自动化(每5秒1次
烟火),
vii。汤姆的积分系统,这样他获得;
• 每次杰里被捕鼠器抓住 1
分,如果他抓住杰瑞,则得到 5 分。
viii. 在汤姆累积了当前
room 中的 5 分后,可以升到下一个房间。这仍应遵循规格 3d 中给出的门规格。
c) 其他批准的延期
通过与您的导师协商,您也可以通过
经批准的等效替代方法证明掌握。
一般期望– 违反时最多适用 5 分的处罚
–需要完整性声明。如果不加罚,将处以2分的罚款。
提交完整性声明,或包括误导性或虚假陈述。
·最高3分的处罚将被应用,如果代码未实现可接受的
理解力和可维护性,或表现出本文档中未以其他方式涵盖
的任何一般缺陷或不良行为。 这包括但不限于
以下事项:
• 对象运动中的错误,例如对象每个位置跳转多个字符位置
框架;
• 超出其允许区域的物体;
• 未能在更新之间适当清除屏幕;
• 涉及不可见或不存在的 objec 的碰撞ts;
• 干扰或闪烁的显示屏;
• 响应时间缓慢、响应时间过快或其他性能缺陷
使仿真难以按照规范操作。
• 程序结构和组织中的严重错误,包括但不限于:
不当使用递归;使用不适当的数据结构,如链接列表或
二进制搜索树;使用#include插入源文件的内容,而不是
头文件的内容;上载同一源文件的多个版本。
• 一般可读性和可维护性错误,包括但不限于:超过
25 个可执行 C 语言指令的函数,其中带有副作用的逗号分隔表达式
将归类为 separate 可执行指令;与
任何其他功能基本相同的功能;有限或没有尝试实施
适当的文档注释;未能遵守专业和一致的
格式;过度使用全球变量bles。
附录 – 文本文件示例和说明
您将获得一些示例文本文件,但需要能够分析
同一常规结构的任何文本文件。每行开头有三个不同的字符将用作标识符,
它们是”W”、”T”和”J”。这些字符是行
上剩余数字代表的指标,其中;
• “W”表示线将包括墙的相对端点坐标(x1、y1)和(x2,y1),
格式如下;
• W x1 y1 x2 y2
• “T”表示线将包括汤姆的相对起始坐标(x,y),格式
如下;
• T x y
• “J”表示线将包括 Jerry的相对起始坐标 (x, y),格式
如下;
• J x y
所有坐标都将相对于屏幕大小显示,这意味着它们都将从 0 到 1 不等。
您必须通过乘以 (屏幕宽度()-1) 或 (屏幕 + 高度()-1)来解释这些坐标
相应地。
W 0.2 0.1 0.2 0.2
W 0.2 0.2 0.2
W 0.8 0.2 0.8 0.8 0.1
W 0.25 0.25 0.35 0.25
W 0.45 0.25 0.25 0.55 0.25
W 0.65 0.25 0.75 0.25
J 0 0 0T
1
W 0.1 0.4 0.4
0.4 0.4 0.1 0.9
W 0.1 0.9 0.90.7 0.9
W 0.7 0.7 0.7
W 0.7 0.7 0.7 0.4 0.7
W 0.95 0.65 0.85
0.65 W 0.85 0.65 0.85 0.45
W 0.85 0.45 0.45 0.95 0.45 0.45